package de.nak.terminumfrageapp.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import de.nak.terminumfrageapp.model.Benutzer;
import de.nak.terminumfrageapp.model.Umfrage;

/**
 * 
 * @description Data Access Object fuer @link Umfrage.
 * @author Cornelia Kugler, Inga Brinkmann, Tim Danker
 * 
 */
public class UmfrageDAO {
	/** Hibernate session factory. */
	private SessionFactory sessionFactory;

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	/**
	 * @description laedt eine einzelne Umfrage..
	 * @param id
	 * @return eine einzelne Umfrage.
	 */
	public Umfrage laden(Long id) {
		Session currentSession = sessionFactory.getCurrentSession();
		return (Umfrage) currentSession.get(Umfrage.class, id);
	}

	/**
	 * @description speichert eine einzelne Umfrage.
	 * @param umfrage
	 */
	public void speichern(Umfrage umfrage) {
		Session currentSession = sessionFactory.getCurrentSession();
		currentSession.saveOrUpdate(umfrage);

	}
	
	/**
	 * @description erstellt eine neue Umfrage.
	 * @param umfrage
	 */
	public Umfrage erstellen(Umfrage umfrage) {

		Session currentSession = sessionFactory.getCurrentSession();

		currentSession.save(umfrage);
		return umfrage;
	}

	/**
	 * @description loescht eine Umfrage.
	 * @param Umfrage
	 */
	
	public void loeschen(Umfrage umfrage) {
		Session currentSession = sessionFactory.getCurrentSession();
		currentSession.delete(umfrage);
	}
	
	/**
	 * @description laedt eine Liste mit Umfragen fuer die ein 
	 * 				mitgegebener Benutzer der Ersteller ist.
	 * @param Benutzer
	 * @return List<Umfrage>
	 */
	@SuppressWarnings("unchecked")
	public List<Umfrage> ladeEigeneUmfragen(Benutzer benutzer) {
		Session currentSession = sessionFactory.getCurrentSession();
		// Query, die fuer eine BenutzerId alle Umfragen ermittelt
		Query query = currentSession
				/*.createQuery("from Umfrage where id=1");*/
				.createQuery("from Umfrage  where ersteller.id ='" + benutzer.getId() + "'");
		
	
		return query.list();
	}

	/**
	 * @description laedt eine Umfrage.
	 * @param id
	 * @return Umfrage
	 */
	public Umfrage ladeUmfrage(Long id) {
		Session currentSession = sessionFactory.getCurrentSession();
		return (Umfrage) currentSession.get(Umfrage.class, id);
	}
	
	/**
	 * @description laedt eine Liste mit allen Umfragen
	 * @return List<Umfrage>
	 */
	@SuppressWarnings("unchecked")
	public List<Umfrage> ladeAlleUmfragen() {
		Session currentSession = sessionFactory.getCurrentSession();
		// Query, die alle Umfragen ermittelt
		Query query = currentSession
				.createQuery("from Umfrage");
		return query.list();
	}

}
